package br.com.sig.cadastro.parceiro.presentation.action;

import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import br.com.sig.business.exception.BaseException;
import br.com.sig.cadastro.business.model.entity.AtividadeComercial;
import br.com.sig.cadastro.parceiro.business.model.bo.ParceiroBO;
import br.com.sig.cadastro.parceiro.business.model.embeddable.Agencia;
import br.com.sig.cadastro.parceiro.business.model.embeddable.Banco;
import br.com.sig.cadastro.parceiro.business.model.embeddable.Conta;
import br.com.sig.cadastro.parceiro.business.model.embeddable.DadosDePagamento;
import br.com.sig.cadastro.parceiro.business.model.entity.Parceiro;
import br.com.sig.cadastro.pessoas.business.model.entity.Pessoa;
import br.com.sig.cadastro.pessoas.business.model.entity.PessoaFisica;
import br.com.sig.cadastro.pessoas.business.model.entity.PessoaJuridica;
import br.com.sig.cadastro.pessoas.business.model.enumeration.TipoPessoa;
import br.com.sig.presentation.action.BaseAction;

@Named
@ViewScoped
public class ParceiroAction extends BaseAction<Parceiro> {

	private static final long serialVersionUID = 8369354674359699800L;	
	
	private TipoPessoa tipoPessoa;
	
	private String atividadeComercial;
	
	@Inject
	private ParceiroBO parceiroBO;

	@PostConstruct
	public void init() {
		setService(parceiroBO);
		this.tipoPessoa = null;
		this.atividadeComercial = null;
		
		if (instance != null && instance.getPessoa() != null && instance.getPessoa().getTipo() != null) {
			setTipoPessoa(instance.getPessoa().getTipo());
		}		
	}
	
	@Override
	protected Parceiro createInstance() {
		Parceiro parceiro = super.createInstance();
		parceiro.setPessoa(new Pessoa());
		parceiro.setDadosDePagamento(new DadosDePagamento());
		parceiro.getDadosDePagamento().setAgencia(new Agencia());
		parceiro.getDadosDePagamento().setBanco(new Banco());
		parceiro.getDadosDePagamento().setConta(new Conta());
		return parceiro;
	}
	
	@Override
	public void initInstance() {
		super.initInstance();
		
		if (getInstance().getDadosDePagamento() == null) {
			getInstance().setDadosDePagamento(new DadosDePagamento());
		}
		
		if (getInstance().getDadosDePagamento().getAgencia() == null) {
			getInstance().getDadosDePagamento().setAgencia(new Agencia());
		}
		
		if (getInstance().getDadosDePagamento().getBanco() == null) {
			getInstance().getDadosDePagamento().setBanco(new Banco());
		}
		
		if (getInstance().getDadosDePagamento().getConta() == null) {
			getInstance().getDadosDePagamento().setConta(new Conta());
		}
	}
	
	@Override
	public void persist() throws BaseException {
		if(getInstance().getAtividadeComercial().isOutros()) {
			getInstance().setAtividadeComercial(new AtividadeComercial());
			getInstance().getAtividadeComercial().setNome(getAtividadeComercial());
		}
		super.persist();
	}
	
	@Override
	public void update() {
		if(getInstance().getAtividadeComercial().isOutros()) {
			getInstance().setAtividadeComercial(new AtividadeComercial());
			getInstance().getAtividadeComercial().setNome(getAtividadeComercial());
		}		
		super.update();
	}
	
	public boolean hasPessoa() {
		return getInstance().getPessoa().getId() != null;
	}
	
	public TipoPessoa getTipoPessoa() {
		return tipoPessoa;
	}

	public void setTipoPessoa(TipoPessoa tipoPessoa) {
		this.tipoPessoa = tipoPessoa;
		
		if (this.tipoPessoa != null && getInstance().getPessoa().getId() == null) {
			if (TipoPessoa.FISICA.equals(getTipoPessoa())) {
				getInstance().setPessoa(new PessoaFisica());
			} else {
				getInstance().setPessoa(new PessoaJuridica());
			}
		}
	}
	
	public String getAtividadeComercial() {
		return atividadeComercial;
	}

	public void setAtividadeComercial(String atividadeComercial) {
		this.atividadeComercial = atividadeComercial;
	}

	public boolean hasAtividadeComercialOutros() {
		return getInstance().getAtividadeComercial() != null && 
				getInstance().getAtividadeComercial().isOutros();		 
	}	
}